import Axios from 'axios';
import Store from '@/store';
import config from '@/utils/app-config';

// 配置基础地址
Axios.defaults.baseURL = config.XHR_BASE_URL + ':' + config.XHR_PORT + config.XHR_PATH;
// 配置 Content-Type
Axios.defaults.headers.post['Content-Type'] = 'application/json; charset=utf-8';
// 配置 axios 跨域 并设置访问权限 允许跨域携带cookie信息
Axios.defaults.withCredentials = true;
// 配置 请求超时
Axios.defaults.timeout = config.XHR_TIMEOUT;

//配置请求拦截器的白名单
const requestWhiteList = config.NO_TOKEN_API_WHITE_LIST;

//获取 Vuex 中的 Token
const getToken = () => {
	let token = Store.state.global.vuex_token;
	return token !== '' ? 'Bearer ' + token : '';
};

// 配置请求拦截器
Axios.interceptors.request.use(
	function (config) {
		//请求白名单内的请求不做任何处理，除外的所有请求都将配置 ToKen
		if (requestWhiteList.indexOf(config.url) === -1) {
			config.headers.Authorization = getToken();
		}
		// 在发送请求之前做些什么
		return config;
	},
	function (error) {
		// 对请求错误做些什么
		return Promise.reject(error);
	}
);

// 配置响应拦截器
Axios.interceptors.response.use(
	function (response) {
		// 2xx 范围内的状态码都会触发该函数。
		// 对响应数据做点什么
		return response.data;
	},
	function (error) {
		// 超出 2xx 范围的状态码都会触发该函数。
		// 对响应错误做点什么
		if (error.response == null) {
			console.error(error);
		} else {
			console.error('请求发送错误：错误码（' + error.response.status + '）' + '错误信息：' + error.response.statusText);
		}
		return Promise.reject(error);
	}
);

const install = Vue => {
	// 挂载到全局
	Vue.config.globalProperties.$axios = Axios;
};
export default install;
